/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import entity.Pedido;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Tiago
 */
public class PedidoDAO {
    
    private Connection connection;
    
    public PedidoDAO() {
        this.connection = new ConnectionFactory().getConnection();
    }
    
    public void insere(Pedido pedido) {
        String sql = ("INSERT INTO pedido(idCliente, idFabricante, tipo_prod, modelo, "
                + "desc_prob, dt_entrada, dt_prevista, valor, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setInt(1, pedido.getIdCliente());
            stmt.setInt(2, pedido.getIdFabricante());
            stmt.setString(3, pedido.getTipoProduto());
            stmt.setString(4, pedido.getModelo());
            stmt.setString(5, pedido.getDescProblema());
            stmt.setDate(6, pedido.getDataEntrada());
            stmt.setDate(7, pedido.getDataPrevista());
            stmt.setDouble(8, pedido.getValor());
            stmt.setString(9, "aberto");
            
            stmt.executeUpdate();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    
    public void altera(Pedido pedido) {
        String sql = ("UPDATE pedido SET status = ? WHERE idPedido = ?");
        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, pedido.getStatus());
            stmt.setInt(2, pedido.getIdPedido());
            stmt.executeUpdate();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    
    public List<Pedido> listar() throws SQLException {
        String sql = "SELECT * FROM pedido";
        List<Pedido> pedidos = new ArrayList();
        PreparedStatement stmt = connection.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while(rs.next()) {
            Pedido p = new Pedido();
            p.setIdPedido(rs.getInt("idPedido"));
            p.setIdFabricante(rs.getInt("idFabricante"));
            p.setIdCliente(rs.getInt("idCliente"));
            p.setTipoProduto(rs.getString("tipo_prod"));
            p.setModelo(rs.getString("modelo"));
            p.setDescProblema(rs.getString("desc_prob"));
            p.setValor(rs.getDouble("valor"));
            p.setStatus(rs.getString("status"));
            p.setDataEntrada(rs.getDate("dt_entrada"));
            p.setDataPrevista(rs.getDate("dt_prevista"));
            pedidos.add(p);
        }
        stmt.close();
        return pedidos;
    }
    
    public List<Pedido> listarAbertos() throws SQLException {
        String sql = "SELECT * FROM pedido WHERE status = ? ORDER BY dt_prevista";
        List<Pedido> pedidos = new ArrayList();
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setString(1, "aberto");
        ResultSet rs = stmt.executeQuery();
        while(rs.next()) {
            Pedido p = new Pedido();
            p.setIdPedido(rs.getInt("idPedido"));
            p.setIdFabricante(rs.getInt("idFabricante"));
            p.setIdCliente(rs.getInt("idCliente"));
            p.setTipoProduto(rs.getString("tipo_prod"));
            p.setModelo(rs.getString("modelo"));
            p.setDescProblema(rs.getString("desc_prob"));
            p.setValor(rs.getDouble("valor"));
            p.setStatus(rs.getString("status"));
            p.setDataEntrada(rs.getDate("dt_entrada"));
            p.setDataPrevista(rs.getDate("dt_prevista"));
            pedidos.add(p);
        }
        stmt.close();
        return pedidos;
    }    
    
    public Pedido getPedido(int idPedido) throws SQLException {
        String sql = "SELECT * FROM pedido WHERE idPedido = ?";
        Pedido p = new Pedido();
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setInt(1, idPedido);
        ResultSet rs = stmt.executeQuery();
        while(rs.next()) {            
            p.setIdPedido(rs.getInt("idPedido"));
            p.setIdFabricante(rs.getInt("idFabricante"));
            p.setIdCliente(rs.getInt("idCliente"));
            p.setTipoProduto(rs.getString("tipo_prod"));
            p.setModelo(rs.getString("modelo"));
            p.setDescProblema(rs.getString("desc_prob"));
            p.setValor(rs.getDouble("valor"));
            p.setStatus(rs.getString("status"));
            p.setDataEntrada(rs.getDate("dt_entrada"));
            p.setDataPrevista(rs.getDate("dt_prevista"));            
        }
        stmt.close();
        return p;
    }
    
    public List<Pedido> procurar(String str) throws SQLException {
        String sql = "SELECT * FROM pedido WHERE tipo_prod LIKE ?";
//                + "UNION SELECT * FROM produto WHERE dt_entrada LIKE ?"
  //              + "UNION SELECT * FROM produto WHERE dt_prevista LIKE ?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        stmt.setString(1, "%"+str+"%");
       // stmt.setString(2, "%"+str+"%");
      //  stmt.setString(3, "%"+str+"%");
        List<Pedido> pedidos = new ArrayList();
        ResultSet rs =   stmt.executeQuery();
        while (rs.next()) {
            Pedido p = new Pedido();
            p.setIdPedido(rs.getInt("idPedido"));
            p.setIdFabricante(rs.getInt("idFabricante"));
            p.setIdCliente(rs.getInt("idCliente"));
            p.setTipoProduto(rs.getString("tipo_prod"));
            p.setModelo(rs.getString("modelo"));
            p.setDescProblema(rs.getString("desc_prob"));
            p.setValor(rs.getDouble("valor"));
            p.setStatus(rs.getString("status"));
            p.setDataEntrada(rs.getDate("dt_entrada"));
            p.setDataPrevista(rs.getDate("dt_prevista"));
            pedidos.add(p);
        }
        stmt.close();
        return pedidos;
    }
    
     public List<Pedido> buscar(String str) throws SQLException {
        String sql = "SELECT * FROM produto WHERE idPedido LIKE %?%"
               + "UNION SELECT * FROM produto WHERE dt_entrada LIKE ?"
               + "UNION SELECT * FROM produto WHERE dt_prevista LIKE ?";
        PreparedStatement stmt = connection.prepareStatement(sql);
        String sa = "%"+str+"%";
        stmt.setString(1, sa);
        stmt.setString(2, "%"+str+"%");
        stmt.setString(3, "%"+str+"%");
        List<Pedido> pedidos = new ArrayList<Pedido>();
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {
            Pedido p = new Pedido();
            p.setIdPedido(rs.getInt("idPedido"));
            p.setIdFabricante(rs.getInt("idFabricante"));
            p.setIdCliente(rs.getInt("idCliente"));
            p.setTipoProduto(rs.getString("tipo_prod"));
            p.setModelo(rs.getString("modelo"));
            p.setDescProblema(rs.getString("desc_prob"));
            p.setValor(rs.getDouble("valor"));
            p.setStatus(rs.getString("status"));
            p.setDataEntrada(rs.getDate("dt_entrada"));
            p.setDataPrevista(rs.getDate("dt_prevista"));
            pedidos.add(p);
        }
        stmt.close();
        return pedidos;
    }
    
    
    
    
}
